如何用MATLAB画二维色彩图,比如有三组数据X,Y,Z ,以XY为横纵坐标,Z显示为不同色彩的图? 您所在的位置:网站首页 matlab 二维坐标 背景 如何用MATLAB画二维色彩图,比如有三组数据X,Y,Z ,以XY为横纵坐标,Z显示为不同色彩的图?

如何用MATLAB画二维色彩图,比如有三组数据X,Y,Z ,以XY为横纵坐标,Z显示为不同色彩的图?

#如何用MATLAB画二维色彩图,比如有三组数据X,Y,Z ,以XY为横纵坐标,Z显示为不同色彩的图?| 来源: 网络整理| 查看: 265

前言

有这样一个问题:

需要吧CFD导出的某时刻下某变量的二维分布进行降维,具体到我的应用场景是把一床层的轴向径向浓度分布导出,要得到浓度沿轴向的分布曲线;需要将6个时间点的床层分布绘制成组图; 问题一

规范化数据

首先我们来对导出的数据进行观察,可以看出:第一列是网格编号,第二列是x坐标(轴向),第三列是y坐标(径向),第四列是变量值。但坐标值的排列并没有显而易见的规律。

我们需要做的是先得到一个二维矩阵,行列分别是轴向和径向坐标。可以这样完成:

在这里我轴向有300个坐标值,径向有20个坐标值,共有300*20=6000个数据。那么先取出唯一的轴向坐标axis_unique;对axis_unique进行遍历,找到当前axis下的径向值得index,逐行填充数据,即可得到需要得数据表。

代码如下:

step='AD' fidID = fopen([step+".csv"]); data = cell2mat(textscan(fidID,'%f %f %f %f','Delimiter',{','},'HeaderLines',1));%去除文件第一行的文字 fclose(fidID); cell_num=data(:,1); axis_coord=data(:,2); radial_coord=data(:,3); y=data(:,4); axis_unique=unique(axis_coord); data_xy=zeros(length(axis_unique),cell_num(end)/length(axis_unique)); for i=1:length(axis_unique) idx = find(data(:,2)==axis_unique(i)); radial_unique=radial_coord(idx); data_xy(i,:)=y(idx); end

径向积分平均

通过对径向进行数值积分来求得一个均值,得到一个轴向浓度分布(n*2),代码如下:

data_axis=zeros(length(axis_unique),1); for i=1:length(axis_unique) data_axis(i,1)=trapz(radial_unique,data_xy(i,:))/(radial_coord(end)-radial_coord(1)); end results=[axis_unique,data_axis];

绘图

画出沿轴向分布曲线和二维云图,代码如下:

plot(axis_unique,data_axis(:,1),'LineWidth',2) ylabel('Adsorption Amount of N_{2} (mol/kg)'); xlabel('Axis'); title('Adsorption Amount of N_{2} at Axis') leg=legend('Integal'); leg.ItemTokenSize=[10,10]; set(gca,'linewidth',1,'fontsize',12,'fontname','Times New Roman'); grid on %做一个对称,把半个床层变成一个完整床层 data_symmetry = [flip(data_xy,2),data_xy]; radial_symmetry = [-flip(radial_unique,1);radial_unique]; load('Small_Rainbow.mat') figure() pcolor(radial_symmetry,axis_unique,data_symmetry); shading interp colormap(Small_Rainbow) ylabel('Axis'); xlabel('Radial'); axis([-0.01 0.01 0 0.15]) set(gca,'DataAspectRatio',[1 1 1]) xticks(gca,[-0.01 0 0.01]) c=colorbar('position',[0.6 0.18 0.03 0.7],'Location','manual'); title('AD'); set(gca,'linewidth',1,'fontsize',12,'fontname','Times New Roman');

结果如下:

保存数据

把radial_symmetry,axis_unique,data_symmetry三个变量保存一下,用于下一步的组图绘制。

save([step '.mat'],'radial_symmetry','axis_unique','data_symmetry');

问题二

最终需要得到一个2*3的组图,每个子图为一个时间点的云图。由于学艺不精,用tecplot不太方便画出这样的组图,新建的Frame里子图之间大小不完全一样。用matlab可以这样实现:

预先加载tecplot导出来的配色Small_Rainbow,这是我们要用的颜色;读取上面保存的数据;用pcolor绘制云图,使用加载过的CFD的经典红蓝配色;设置一系列轴,图,colorbar等的参数;遍历所有数据,完成组图。

代码如下:

steps=['AD';'ED';'BD';'PG';'EP';'PR']; load('Small_Rainbow.mat') figure() for j=1:6 file=steps(j,:); load(file) subplot(2,3,j) pcolor(radial_symmetry,axis_unique(2:end),data_symmetry(2:end,:)); shading interp colormap(Small_Rainbow) ylabel('Axis'); xlabel('Radial'); set(gca,'xtick',[],'ytick',[],'xcolor','w','ycolor','w') set(gca,'DataAspectRatio',[1 1 1]) xticks(gca,[-0.01 0 0.01]) box off c=colorbar; c.Position(1)=c.Position(1)+0.04; c.Position(2)=c.Position(2)+0.02; c.Position(3)=0.01; c.Position(4)=0.3; c.Limits=[0 3]; title(file); set(gca,'fontsize',12,'fontname','Times New Roman'); end

图:

主要用的函数有unique、find、trapz、flip、pcolor、colorbar、colormap。

颜色图分享



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有